home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 1 / QRZ Ham Radio Callsign Database - December 1993.iso / ucsd / packet / thebox / sourcarc.exe / arc / LOGSCAN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-09-14  |  28.5 KB  |  995 lines

  1.  
  2. (*
  3.  
  4.    LOGSCAN  01.01.1988  *> Logbuchauswertung <* DF3AV R.R]DIGER PEINE
  5.  
  6. *)
  7.  
  8. Uses Printer,Dos,Crt;
  9.  
  10.  
  11. Type
  12.  
  13.   UserRec    =   Record
  14.                   Call   : String[6];
  15.                   Count  : Integer;
  16.                   Dauer  : Integer;
  17.                   Durch  : Integer;
  18.                   Bytes  : real;
  19.                  End;
  20.  
  21.   Str5       =   String[5];
  22.   AnyStr     =   String[255];
  23.   Str8       =   String[8];
  24.  
  25. Var
  26.  
  27.   User       :   Array[1..1000] of UserRec;
  28.   Uebersicht :   Array[1..31,0..23] of Integer;
  29.   Betrieb    :   Array[0..23] of integer;
  30.   Bytes      :   Array[0..23] of Real;
  31.   Baud_std   :   Array[0..23] of Real;
  32.   UserCount  :   Integer;
  33.   LogCount   :   Integer;
  34.   LogFile    :   Text;
  35.   ImportChan :   Text;
  36.   Drucker    :   Boolean;
  37.   Call       :   String[6];
  38.   Ch         :   Char;
  39.   FirstDate  :   String[40];
  40.   LastDate   :   String[40];
  41.   AllTime    :   Real;
  42.   Stunde     :   Integer;
  43.   Tag        :   Integer;
  44.   FirstTag   :   Integer;
  45.   maxTag     :   Integer;
  46.   maxBetrieb :   Integer;
  47.   i          :   Integer;
  48.   N          :   Integer;
  49.   MaxTime    :   Real;
  50.   MaxByte    :   real;
  51.   UserTime   :   Real;
  52.   ByteCount  :   Real;
  53.   GlobalByteCount  : Real;
  54.   GlobalBytesDurch : Real;
  55.   Baud       :   Real;
  56.   MaxBaud    :   Real;
  57.   MinBaud    :   Real;
  58.   FirstTime  :   String[40];
  59.   LastTime   :   String[40];
  60.   LaufZeit   :   Real;
  61.  
  62.   Channel1   :   Integer;
  63.   Channel2   :   Integer;
  64.   Channel3   :   Integer;
  65.   Channel4   :   Integer;
  66.   Channel5   :   Integer;
  67.   Channel6   :   Integer;
  68.   Channel7   :   Integer;
  69.   Channel8   :   Integer;
  70.   Channel9   :   Integer;
  71.  
  72.   BoxProto   :   Boolean;
  73.  
  74. Procedure Sort;
  75. Type Dummy   = Record
  76.                   Call   : String[6];
  77.                   Count  : Integer;
  78.                   Dauer  : Integer;
  79.                   Durch  : Integer;
  80.                   Bytes  : real;
  81.                  End;
  82.  
  83. var b     : String[6];
  84.     x,y,z : Integer;
  85.     ok    : boolean;
  86.     Dumm  : Dummy;
  87.  
  88. Begin
  89.   for x := 2 to UserCount do begin
  90.     Dumm.Call  := User[x].Call;
  91.     Dumm.Count := User[x].Count;
  92.     Dumm.Dauer := User[x].Dauer;
  93.     Dumm.Durch := User[x].Durch;
  94.     Dumm.Bytes := User[x].Bytes;
  95.     y:=0;ok := false;
  96.     repeat
  97.     y := succ(y);
  98.       if User[y].Call >= Dumm.Call then begin;
  99.         for z := x-1 downto y do begin;
  100.           User[z+1].Call := User[z].Call;
  101.           User[z+1].Count:= User[z].Count;
  102.           User[z+1].Dauer:= User[z].Dauer;
  103.           User[z+1].Durch:= User[z].Durch;
  104.           User[z+1].Bytes:= User[z].Bytes;
  105.           ok := true;
  106.         end;
  107.         if OK = true then
  108.          begin;
  109.           User[y].Call := Dumm.Call;
  110.           User[y].Count:= Dumm.Count;
  111.           User[y].Dauer:= Dumm.Dauer;
  112.           User[y].Durch:= Dumm.Durch;
  113.           User[y].Bytes:= Dumm.Bytes;
  114.          end;
  115.       end;
  116.     until (y = x) or (ok = true);
  117.     write(#13,x:7);
  118.   end;
  119. End;
  120.  
  121.  
  122. function Wochentag (Jahr : Str8) : integer;
  123. var x,y,z,a,b :integer;
  124.     Schaltjahr:boolean;
  125. Arbeit : String[2];
  126. begin
  127.   b := 0;Schaltjahr := false;
  128.   Arbeit := copy (Jahr,1,2);
  129.   val(Arbeit,x,a);
  130.   Arbeit := copy (Jahr,4,2);
  131.   val(Arbeit,y,a);
  132.     case y of
  133.     2 : b := 1;
  134.     3 : b := 0;
  135.     4 : b := 1;
  136.     5 : b := 1;
  137.     6 : b := 2;
  138.     7 : b := 2;
  139.     8 : b := 3;
  140.     9 : b := 4;
  141.    10 : b := 4;
  142.    11 : b := 5;
  143.    12 : b := 5;
  144.     end;
  145.   Arbeit := copy (Jahr,7,2);
  146.   val(Arbeit,z,a);
  147.   if (z mod 4 = 0) then Schaltjahr := true;
  148.   If not Schaltjahr and (y >2) then b := b-1;
  149.   Wochentag := x+b+30*(y-1);
  150. end;
  151.  
  152. function Minuten (Jahr : Str5) : integer;
  153. var x,y,a :integer;
  154. Arbeit : String[2];
  155. begin
  156.   Arbeit := copy (Jahr,1,2);
  157.   val(Arbeit,x,a);
  158.   Arbeit := copy (Jahr,4,2);
  159.   val(Arbeit,y,a);
  160.   Minuten := y+60*(x);
  161. end;
  162.  
  163.  
  164.  
  165. (* berechnet die Differenz in Minuten zwischen 2 Time-Strings *)
  166.  
  167. function TimeDiff(LogZeile:AnyStr) : integer;
  168. var  result      : integer;
  169.      vonStunden,
  170.      vonMinuten,
  171.      bisStunden,
  172.      bisMinuten  : integer;
  173.      Fehler      : integer;
  174.      i           : integer;
  175.      ByteString  : string[6];
  176. Begin
  177.   result     := 0;
  178.   vonStunden := 0;
  179.   vonMinuten := 0;
  180.   bisStunden := 0;
  181.   bisMinuten := 0;
  182.   Fehler     := 0;
  183.   i          := 0;
  184.   ByteString := ' ';
  185.  
  186.   ByteCount := 0;
  187.   val(copy(LogZeile,19,2),vonStunden,Fehler);
  188.   if Fehler = 0 then
  189.   val(copy(LogZeile,22,2),vonMinuten,Fehler);
  190.   if Fehler = 0 then
  191.   val(copy(LogZeile,27,2),bisStunden,Fehler);
  192.   if Fehler = 0 then
  193.   val(copy(LogZeile,30,2),bisMinuten,Fehler);
  194.   if Fehler = 0 then
  195.   begin
  196.    if bisStunden < vonStunden then bisStunden := bisStunden + 24;
  197.    result := 60 * (bisStunden - vonStunden) + bisMinuten - vonMinuten;
  198.    Stunde := vonStunden;
  199.    val(copy(LogZeile,9,2),Tag,Fehler);
  200.    if Tag > maxTag then maxTag := Tag;
  201.    ByteString := copy(LogZeile,39,6);
  202.    while (copy(ByteString,1,1) = ' ') do DELETE(ByteString,1,1);
  203.    val(ByteString,ByteCount,Fehler);
  204.    If Fehler <> 0 then ByteCount := 0;
  205.    GlobalByteCount := GlobalByteCount + ByteCount;
  206.   end
  207.   else result := -1;
  208.   TimeDiff := result;
  209.   MaxTime  := MaxTime + result;
  210. End;
  211.  
  212.  
  213.  
  214. procedure OutUebersicht(Drucker:boolean);
  215. Var
  216.      i      :   Integer;
  217.      Maxbytes : real;
  218.      maxBaud_std : real;
  219.      Bytes_std : Array [0..23] of real;
  220.      Betrieb_d : Array [0..23] of integer;
  221. begin
  222.     i := 0;
  223.     for Stunde := 0 to 23 do
  224.     Begin
  225.       for Tag := FirstTag to maxTag do
  226.       Begin
  227.         Betrieb[Stunde] := Betrieb[Stunde] + Uebersicht[Tag,Stunde];
  228.       End;
  229.     End;
  230.  
  231.     for Stunde := 0 to 23 do
  232.      if maxBetrieb < Betrieb[Stunde] then maxBetrieb := Betrieb[Stunde];
  233.     for Stunde := 0 to 23 do
  234.      Betrieb_d[Stunde] := round(Betrieb[Stunde] * 20.0 / maxBetrieb);
  235.  
  236.     (* Balkendiagramm *)
  237.     writeln;writeln;
  238.     writeln('    T a g e s b e l a s t u n g   C o n n e c t s');
  239.     writeln('    ---------------------------------------------');
  240.     writeln;
  241.  
  242.     if Drucker then
  243.     begin
  244.      writeln(lst);writeln(lst);
  245.      writeln(lst,'    T a g e s b e l a s t u n g  C o n n e c t s');
  246.      writeln(lst,'    --------------------------------------------');
  247.      writeln(lst);
  248.     end;
  249.  
  250.     if BoxProto then
  251.     begin
  252.      writeln(ImportChan,'S STATISTI @ ',ParamStr(1),#13#10'Diagramm Connects');
  253.      writeln(ImportChan);writeln(ImportChan);
  254.      writeln(ImportChan,'    T a g e s b e l a s t u n g  C o n n e c t s');
  255.      writeln(ImportChan,'    --------------------------------------------');
  256.      writeln(ImportChan);
  257.     end;
  258.  
  259.     for i := 20 downto 0 do
  260.     Begin
  261.       if (i mod 5 = 0) then
  262.       Begin
  263.         (* Skalierung *)
  264.         write((maxBetrieb * i / 20.0 / maxTag):4:1);
  265.         if Drucker then
  266.         write(lst,#13#10,(maxBetrieb * i / 20.0 / maxTag):4:1);
  267.  
  268.         if BoxProto then
  269.         write(ImportChan,#13#10,(maxBetrieb * i / 20.0 / maxTag):4:1);
  270.  
  271.       End
  272.       else
  273.       begin
  274.        write('    ');
  275.        if Drucker then
  276.        write(lst,#13#10'    ');
  277.        if BoxProto then
  278.        write(ImportChan,#13#10'    ');
  279.       end;
  280.       for Stunde := 0 to 23 do
  281.       Begin
  282.         if (i mod 5 = 0) and (i <> 0) then
  283.         Begin
  284.           if Betrieb_d[Stunde] >= i then write(' .▒') else write(' . ');
  285.           if Drucker then
  286.           begin
  287.            if Betrieb_d[Stunde] >= i then write(lst,' .▒') else write(lst,' . ');
  288.           end;
  289.           if BoxProto then
  290.           begin
  291.            if Betrieb_d[Stunde] >= i then write(ImportChan,' .▒') else write(ImportChan,' . ');
  292.           end;
  293.         End
  294.         else
  295.         Begin
  296.           if Betrieb_d[Stunde] >= i then write('  ▒') else write('   ');
  297.           if Drucker then
  298.           begin
  299.            if Betrieb_d[Stunde] >= i then write(lst,'  ▒') else write(lst,'   ');
  300.           end;
  301.           if BoxProto then
  302.           begin
  303.            if Betrieb_d[Stunde] >= i then write(ImportChan,'  ▒') else write(ImportChan,'   ');
  304.           end;
  305.         End;
  306.       End;
  307.       writeln;
  308.     end;
  309.     writeln(' ----------------------------------------------------------------------------');
  310.     write(' Std');
  311.     for Stunde := 0 to 23 do write(Stunde:3);
  312.     writeln;
  313.     if Drucker then
  314.     begin
  315.      writeln(lst,#13#10' ----------------------------------------------------------------------------');
  316.      write(lst,' Std');
  317.      for Stunde := 0 to 23 do write(lst,Stunde:3);
  318.      writeln(lst);
  319.     end;
  320.     if BoxProto then
  321.     begin
  322.      writeln(ImportChan,#13#10' ----------------------------------------------------------------------------');
  323.      write(ImportChan,' Std');
  324.      for Stunde := 0 to 23 do write(ImportChan,Stunde:3);
  325.      writeln(ImportChan);
  326.     end;
  327.     i := 0;
  328.     if Not Drucker then Begin;
  329.       Write('    Weiter mit Taste !');
  330.       ch := readkey;
  331.     End;
  332.     if(BoxProto) then writeln(ImportChan,'***end');
  333.     MaxBytes := 0;
  334.     LaufZeit := 0;
  335.     LaufZeit := ((Wochentag(Lastdate) * 24.0 * 60.0)+Minuten(LastTime));
  336.     Laufzeit := Laufzeit - ((Wochentag(Firstdate) * 24.0 * 60.0)+Minuten(FirstTime));
  337.  
  338.     for Stunde := 0 to 23 do
  339.      if maxBytes < Bytes[Stunde] then maxBytes := Bytes[Stunde];
  340.     MaxBytes := round(MaxBytes / 1024.0 * 60.0 * 24.0 / Laufzeit);
  341.  
  342.     for Stunde := 0 to 23 do
  343.      Bytes_std[Stunde] := round(Bytes[Stunde] * 20.0 / 1024.0 / MaxBytes * 60.0 * 24.0 / Laufzeit);
  344.  
  345.     (* Balkendiagramm *)
  346.     writeln;writeln;
  347.     writeln('    T a g e s b e l a s t u n g   K - B y t e s');
  348.     writeln('    -------------------------------------------');
  349.     writeln;
  350.  
  351.     if Drucker then
  352.     begin
  353.      writeln(lst);writeln(lst);
  354.      writeln(lst,'    T a g e s b e l a s t u n g    K - B y t e s');
  355.      writeln(lst,'    --------------------------------------------');
  356.      writeln(lst);
  357.     end;
  358.  
  359.     if BoxProto then
  360.     begin
  361.      writeln(ImportChan,'S Statisti @ ',ParamStr(1),#13#10'Diagramm KBytes');
  362.      writeln(ImportChan);writeln(ImportChan);
  363.      writeln(ImportChan,'    T a g e s b e l a s t u n g    K - B y t e s');
  364.      writeln(ImportChan,'    --------------------------------------------');
  365.      writeln(ImportChan);
  366.     end;
  367.     for i := 20 downto 0 do
  368.     Begin
  369.       if (i mod 5 = 0) then
  370.       Begin
  371.         (* Skalierung *)
  372.         write((maxBytes * i / 20.0 ):5:0);
  373.         if Drucker then
  374.         write(lst,#13#10,(maxBytes * i / 20.0 ):5:0);
  375.         if BoxProto then
  376.         write(ImportChan,#13#10,(maxBytes * i / 20.0 ):5:0);
  377.       End
  378.       else
  379.       begin
  380.        write('     ');
  381.        if Drucker then
  382.        write(lst,#13#10'     ');
  383.        if BoxProto then
  384.        write(ImportChan,#13#10'     ');
  385.       end;
  386.       for Stunde := 0 to 23 do
  387.       Begin
  388.         if (i mod 5 = 0) and (i <> 0) then
  389.         Begin
  390.           if Bytes_std[Stunde] >= i then write(' .▒') else write(' . ');
  391.           if Drucker then
  392.           begin
  393.            if Bytes_std[Stunde] >= i then write(lst,' .▒') else write(lst,' . ');
  394.           end;
  395.           if BoxProto then
  396.           begin
  397.            if Bytes_std[Stunde] >= i then write(ImportChan,' .▒') else write(ImportChan,' . ');
  398.           end;
  399.         End
  400.         else
  401.         Begin
  402.           if Bytes_std[Stunde] >= i then write('  ▒') else write('   ');
  403.           if Drucker then
  404.           begin
  405.            if Bytes_std[Stunde] >= i then write(lst,'  ▒') else write(lst,'   ');
  406.           end;
  407.           if BoxProto then
  408.           begin
  409.            if Bytes_std[Stunde] >= i then write(ImportChan,'  ▒') else write(ImportChan,'   ');
  410.           end;
  411.         End;
  412.       End;
  413.       writeln;
  414.     End;
  415.     writeln('  ----------------------------------------------------------------------------');
  416.     write('  Std');
  417.     for Stunde := 0 to 23 do write(Stunde:3);
  418.     writeln;
  419.     if Drucker then
  420.     begin
  421.      writeln(lst,#13#10'  ----------------------------------------------------------------------------');
  422.      write(lst,'  Std');
  423.      for Stunde := 0 to 23 do write(lst,Stunde:3);
  424.      write(lst,^L);
  425.     end;
  426.     if BoxProto then
  427.     begin
  428.      writeln(ImportChan,#13#10'  ----------------------------------------------------------------------------');
  429.      write(ImportChan,'  Std');
  430.      for Stunde := 0 to 23 do write(ImportChan,Stunde:3);
  431.      writeln(ImportChan,#13#10'***end');
  432.     end;
  433.     if Not Drucker then Begin;
  434.       Write('    Weiter mit Taste !');
  435.       ch := readkey;
  436.     End;
  437.     i := 0;
  438.     maxBaud_std := 0;
  439.     for Stunde := 0 to 23 do
  440.      Baud_std[Stunde] := Baud_std[Stunde] / Betrieb[Stunde];
  441.     for Stunde := 0 to 23 do
  442.      if maxBaud_std < Baud_std[Stunde] then maxBaud_std := Baud_std[Stunde];
  443.     for Stunde := 0 to 23 do
  444.      Baud_std[Stunde] := round(Baud_std[Stunde] * 20.0 / maxBaud_std);
  445.  
  446.     (* Balkendiagramm *)
  447.     writeln;writeln;
  448.     writeln('    T a g e s b e l a s t u n g   B A U D - E F F.');
  449.     writeln('    ----------------------------------------------');
  450.     writeln;
  451.  
  452.     if Drucker then
  453.     begin
  454.      writeln(lst);writeln(lst);
  455.      writeln(lst,'    T a g e s b e l a s t u n g    B A U D - E F F.');
  456.      writeln(lst,'    -----------------------------------------------');
  457.      writeln(lst);
  458.     end;
  459.  
  460.     if BoxProto then
  461.     begin
  462.      writeln(ImportChan,'S Statisti @ ',ParamStr(1),#13#10'Diagramm Baudraten');
  463.      writeln(ImportChan);writeln(ImportChan);
  464.      writeln(ImportChan,'    T a g e s b e l a s t u n g    B A U D - E F F.');
  465.      writeln(ImportChan,'    -----------------------------------------------');
  466.      writeln(ImportChan);
  467.     end;
  468.     for i := 20 downto 0 do
  469.     Begin
  470.       if (i mod 5 = 0) then
  471.       Begin
  472.         (* Skalierung *)
  473.         write((maxbaud_std * i / 20.0 ):5:0);
  474.         if Drucker then
  475.         write(lst,#13#10,(maxbaud_std * i / 20.0 ):5:0);
  476.         if BoxProto then
  477.         write(ImportChan,#13#10,(maxbaud_std * i / 20.0 ):5:0);
  478.       End
  479.       else
  480.       begin
  481.        write('     ');
  482.        if Drucker then
  483.        write(lst,#13#10'     ');
  484.        if BoxProto then
  485.        write(ImportChan,#13#10'     ');
  486.       end;
  487.       for Stunde := 0 to 23 do
  488.       Begin
  489.         if (i mod 5 = 0) and (i <> 0) then
  490.         Begin
  491.           if Baud_std[Stunde] >= i then write(' .▒') else write(' . ');
  492.           if Drucker then
  493.           begin
  494.            if Baud_std[Stunde] >= i then write(lst,' .▒') else write(lst,' . ');
  495.           end;
  496.           if BoxProto then
  497.           begin
  498.            if Baud_std[Stunde] >= i then write(ImportChan,' .▒') else write(ImportChan,' . ');
  499.           end;
  500.         End
  501.         else
  502.         Begin
  503.           if Baud_std[Stunde] >= i then write('  ▒') else write('   ');
  504.           if Drucker then
  505.           begin
  506.            if Baud_std[Stunde] >= i then write(lst,'  ▒') else write(lst,'   ');
  507.           end;
  508.           if BoxProto then
  509.           begin
  510.            if Baud_std[Stunde] >= i then write(ImportChan,'  ▒') else write(ImportChan,'   ');
  511.           end;
  512.         End;
  513.       End;
  514.       writeln;
  515.     End;
  516.     writeln('  ----------------------------------------------------------------------------');
  517.     write('  Std');
  518.     for Stunde := 0 to 23 do write(Stunde:3);
  519.     writeln;
  520.     if Drucker then
  521.     begin
  522.      writeln(lst,#13#10'  ----------------------------------------------------------------------------');
  523.      write(lst,'  Std');
  524.      for Stunde := 0 to 23 do write(lst,Stunde:3);
  525.      writeln(lst,^O^L);
  526.     end;
  527.     if BoxProto then
  528.     begin
  529.      writeln(ImportChan,#13#10'  ----------------------------------------------------------------------------');
  530.      write(ImportChan,'  Std');
  531.      for Stunde := 0 to 23 do write(ImportChan,Stunde:3);
  532.      writeln(ImportChan);
  533.     end;
  534.     if Not Drucker then Begin;
  535.       Write('    Weiter mit Taste !');
  536.       ch := readkey;
  537.     End;
  538. end;
  539.  
  540. procedure OutChannel(Drucker:boolean);
  541. Var Gesamt : Integer;
  542.     Ergo   : Real;
  543. begin
  544.   Gesamt   := 0;
  545.   Ergo     := 0;
  546.  
  547.  Gesamt :=   Channel1
  548.            + Channel2
  549.            + Channel3
  550.            + Channel4
  551.            + Channel5
  552.            + Channel6
  553.            + Channel7
  554.            + Channel8
  555.            + Channel9;
  556.  writeln;
  557.  
  558.  UserTime:= MaxTime / UserCount;
  559.  MaxTime := MaxTime / LogCount;
  560.  writeln('Anzahl der Connects..........................: ',
  561.              LogCount:8);
  562.  writeln('Anzahl der Stationen.........................: ',
  563.              UserCount:8);
  564.  writeln('Durchschnittliche Verbindungszeit pro Connect: ',
  565.              MaxTime:8:0);
  566.  writeln('Durchschnittliche Verbindungszeit pro User...: ',
  567.              UserTime:8:0);
  568.  writeln('Anzahl der ausgelesenen Zeichen .............: ',
  569.              GlobalByteCount:8:0);
  570.  writeln('Durchschnittlich ausgel. Zeichen pro User ...: ',
  571.              (GlobalBytesDurch/UserCount):8:0);
  572.  writeln('Max./ Durch./ Min. Baudzahl eines Users .....: ',
  573.              (MaxBaud):8:0,(GlobalByteCount/AllTime/8):8:0,(MinBaud):8:0);
  574.  writeln('Auslastung des Systems in % .................: ',
  575.              (AllTime/LaufZeit*100):8:0);
  576.  
  577.  if(Drucker) then
  578.  begin
  579.   writeln(lst,#13#10#18);   (* Drucker wieder auf Pica *)
  580.   writeln(Lst,'Anzahl der Connects..........................: ',
  581.               LogCount:8);
  582.   writeln(Lst,'Anzahl der Stationen.........................: ',
  583.               UserCount:8);
  584.   writeln(lst,'Durchschnittliche Verbindungszeit pro Connect: ',
  585.               MaxTime:8:0);
  586.   writeln(lst,'Durchschnittliche Verbindungszeit pro User...: ',
  587.               UserTime:8:0);
  588.   writeln(lst,'Anzahl der ausgelesenen Zeichen .............: ',
  589.               GlobalByteCount:8:0);
  590.   writeln(lst,'Durchschnittlich ausgel. Zeichen pro User ...: ',
  591.               (GlobalBytesDurch/UserCount):8:0);
  592.  writeln(lst,'Max./ Durch./ Min. Baudzahl eines Users .....: ',
  593.              (MaxBaud):8:0,(GlobalByteCount/AllTime/8):8:0,(MinBaud):8:0);
  594.  writeln(lst,'Auslastung des Systems in % .................: ',
  595.              (AllTime/LaufZeit*100):8:0);
  596.   writeln(lst);
  597.   writeln(Lst,'Auslastung pro Kanal in Prozent:'#13#10);
  598.   writeln(Lst,'Kanal   1       2       3       4       5       6       7       8       9');
  599.   write(Lst,'  ');
  600.  end;
  601.  if(BoxProto) then
  602.  begin
  603.   writeln(ImportChan,'S Statisti @ ',ParamStr(1),#13#10'Absolut-Werte');
  604.   writeln(ImportChan,#13#10'Anzahl der Connects..........................: ',
  605.               LogCount:8);
  606.   writeln(ImportChan,'Anzahl der Stationen.........................: ',
  607.               UserCount:8);
  608.   writeln(ImportChan,'Durchschnittliche Verbindungszeit pro Connect: ',
  609.               MaxTime:8:0);
  610.   writeln(ImportChan,'Durchschnittliche Verbindungszeit pro User...: ',
  611.               UserTime:8:0);
  612.   writeln(ImportChan,'Anzahl der ausgelesenen Zeichen .............: ',
  613.               GlobalByteCount:8:0);
  614.   writeln(ImportChan,'Durchschnittlich ausgel. Zeichen pro User ...: ',
  615.               (GlobalBytesDurch/UserCount):8:0);
  616.  writeln(ImportChan,'Max./ Durch./ Min. Baudzahl eines Users .....: ',
  617.              (MaxBaud):8:0,(GlobalByteCount/AllTime/8):8:0,(MinBaud):8:0);
  618.  writeln(ImportChan,'Auslastung des Systems in % .................: ',
  619.              (AllTime/LaufZeit*100):8:0);
  620.   writeln(ImportChan);
  621.   writeln(ImportChan,'Auslastung pro Kanal in Prozent:'#13#10);
  622.   writeln(ImportChan,'Kanal'#13#10'      1       2       3       4       5       6       7       8       9');
  623.  end;
  624.  writeln(#13#10'Auslastung pro Kanal in Prozent:'#13#10);
  625.  writeln('Kanal'#13#10'      1       2       3       4       5       6       7       8       9');
  626.  Ergo := (Channel1/Gesamt) * 100;
  627.  if(Drucker) then write(Lst,Ergo:8:1);
  628.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  629.  write(Ergo:8:1);
  630.  Ergo := (Channel2/Gesamt) * 100;
  631.  if(Drucker) then write(Lst,Ergo:8:1);
  632.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  633.  write(Ergo:8:1);
  634.  Ergo := (Channel3/Gesamt) * 100;
  635.  if(Drucker) then write(Lst,Ergo:8:1);
  636.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  637.  write(Ergo:8:1);
  638.  Ergo := (Channel4/Gesamt) * 100;
  639.  if(Drucker) then write(Lst,Ergo:8:1);
  640.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  641.  write(Ergo:8:1);
  642.  Ergo := (Channel5/Gesamt) * 100;
  643.  write(Ergo:8:1);
  644.  if(Drucker) then write(Lst,Ergo:8:1);
  645.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  646.  Ergo := (Channel6/Gesamt) * 100;
  647.  write(Ergo:8:1);
  648.  if(Drucker) then write(Lst,Ergo:8:1);
  649.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  650.  Ergo := (Channel7/Gesamt) * 100;
  651.  write(Ergo:8:1);
  652.  if(Drucker) then write(Lst,Ergo:8:1);
  653.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  654.  Ergo := (Channel8/Gesamt) * 100;
  655.  if(Drucker) then write(Lst,Ergo:8:1);
  656.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  657.  write(Ergo:8:1);
  658.  Ergo := (Channel9/Gesamt) * 100;
  659.  if(Drucker) then write(Lst,Ergo:8:1);
  660.  if(BoxProto) then write(ImportChan,Ergo:8:1);
  661.  write(Ergo:8:1);
  662.  if(BoxProto) then writeln(ImportChan,#13#10'***end');
  663.  writeln;
  664. end;
  665.  
  666.  
  667. procedure OutUser(Drucker:boolean);
  668.  
  669.  Var I          : Integer;
  670.      SingleUser : UserRec;
  671.      Count      : Integer;
  672.      Ch1,Ch2    : Char;
  673.      BytesDurch : Real;
  674. begin
  675.  Count := 0;
  676.  Ch1   := ' ';
  677.  Ch2   := ' ';
  678.  BytesDurch := 0;
  679.  i     := 0;
  680.  
  681.  writeln(^M^J^M^J^M^J'Einzelauswertung');
  682.  writeln(            '----------------'^M^J);
  683.  writeln('Call  LgIn ZGes ZCon    Bytes   BCon    Baud');
  684.  write(  '--------------------------------------------');
  685.  
  686.  if Drucker then
  687.  Begin
  688.    writeln(lst,^M^J^M^J^M^J'Einzelauswertung');
  689.    writeln(lst,            '----------------'^M^J);
  690.    writeln(lst,^O'Call  LgIn ZGes ZCon    Bytes   BCon    Baud    Call  LgIn ZGes ZCon    Bytes   BCon    Baud');
  691.    (* Schmalschrift mit ^O einschalten; FormFeed mit ^L;*)
  692.    write(lst,  '--------------------------------------------------------------------------------------------');
  693.  End;
  694.  For I := 1 to UserCount do
  695.  begin
  696.   SingleUser := User[i];
  697.   If SingleUser.Count > 0 then
  698.   begin
  699.    Count := Count + 1;
  700.  
  701.    if (Ch2 <> SingleUser.Call[2]) or (Ch1 <> SingleUser.Call[1]) then
  702.    begin
  703.     Count := 3;
  704.     writeln;
  705.     if Drucker then writeln(lst);
  706.     if(BoxProto) then
  707.     begin
  708.      writeln(ImportChan,#13#10'***end');
  709.      writeln(ImportChan,'s statisti @ ',ParamStr(1),#13#10'Einzelauswertung ',copy(SingleUser.Call,1,3),' ->');
  710.      writeln(ImportChan);
  711.      writeln(ImportChan,'Call  LgIn ZGes ZCon    Bytes   BCon    Baud');
  712.      writeln(ImportChan,'--------------------------------------------');
  713.     end;
  714.    end;
  715.  
  716.    if Count = 3 then
  717.    begin
  718.     Count := 1;
  719.     if Drucker then writeln(lst);
  720.    end;
  721.  
  722.    SingleUser.Durch := SingleUser.Dauer div SingleUser.Count;
  723.    BytesDurch := SingleUser.Bytes/SingleUser.Count;
  724.    GlobalBytesDurch:= GlobalBytesDurch + BytesDurch;
  725.    If SingleUser.Dauer = 0 then SingleUser.Dauer := 1;
  726.    Baud:=SingleUser.Bytes/SingleUser.Dauer*8/60;
  727.    Baud := Baud +0.5;
  728.    If Baud > MaxBaud then MaxBaud := Baud;
  729.    If Baud < MinBaud then MinBaud := Baud;
  730.    writeln(SingleUser.Call,SingleUser.Count:4,
  731.            SingleUser.Dauer:5,SingleUser.Durch:5,
  732.            SingleUser.Bytes:9:0,BytesDurch:7:0,Baud:8:0);
  733.    if(BoxProto) then
  734.    begin
  735.     writeln(ImportChan,SingleUser.Call,SingleUser.Count:4,
  736.                        SingleUser.Dauer:5,SingleUser.Durch:5,
  737.                        SingleUser.Bytes:9:0,BytesDurch:7:0,Baud:8:0);
  738.    end;
  739.    if Drucker then
  740.    Begin
  741.      write(lst,SingleUser.Call,SingleUser.Count:4,SingleUser.Dauer:5,SingleUser.Durch:5,
  742.                SingleUser.Bytes:9:0,BytesDurch:7:0,Baud:8:0);
  743.      if Count = 1 then write(lst,'    ');
  744.    End;
  745.    Ch2 := SingleUser.Call[2];
  746.    Ch1 := SingleUser.Call[1];
  747.   end;
  748.  end;
  749.  writeln;
  750.  if Drucker then writeln(lst);
  751.  if(BoxProto) then writeln(ImportChan,'***end');
  752. end;
  753.  
  754.  
  755. function NewUser(Str:AnyStr) : boolean;
  756. Var SingleUser : UserRec;
  757.     i          : Integer;
  758.     found      : boolean;
  759.     Time       : Integer;
  760.  
  761. begin
  762.  
  763.   FILLCHAR(SingleUser,sizeof(SingleUser),#0);
  764.  
  765.   found := false;
  766.   Time := 0;
  767.   if(UserCount = 0) then
  768.   begin
  769.    found     := false;
  770.    FirstDate := Copy(Str,9,8);
  771.    FirstTime := Copy(Str,19,5);
  772.   end
  773.  
  774.   else
  775.  
  776.   begin
  777.  
  778.    i := 0;
  779.    REPEAT
  780.     i := succ(i);
  781.     SingleUser := User[i];
  782.     if SingleUser.Call = Call then
  783.     begin
  784.      Time := TimeDiff(Str);
  785.      if(Time >= 0) then
  786.      begin
  787.       SingleUser.Count       := SingleUser.Count + 1;
  788.       SingleUser.Bytes       := SingleUser.Bytes + ByteCount;
  789.       Uebersicht[Tag,Stunde] := Uebersicht[Tag,Stunde] + 1;
  790.       SingleUser.Dauer       := SingleUser.Dauer + Time;
  791.       Bytes[Stunde]          := Bytes[Stunde] + ByteCount;
  792.       AllTime                := AllTime + Time;
  793.       User[i]                := SingleUser;
  794.       found                  := true;
  795.       if(Time <= 0) then Time:= 1;
  796.       Baud_std[Stunde]       := Baud_std[Stunde] + (ByteCount / Time * 8 / 60);
  797.      end;
  798.     end;
  799.    UNTIL found OR (i >= UserCount);
  800.   end;
  801.  
  802.   NewUser   := not found;
  803.  
  804. end;
  805.  
  806.  
  807. procedure GetUser(Str:AnyStr);
  808. Var SingleUser   : UserRec;
  809.     Time         : Integer;
  810.  
  811. begin
  812.  
  813.  FILLCHAR(SingleUser,sizeof(SingleUser),#0);
  814.  
  815.  Time := 0;
  816.  Time              := TimeDiff(Str);
  817.  
  818.  if Time >= 0 then
  819.  begin
  820.   SingleUser.Call        := Call;
  821.   SingleUser.Count       := 1;
  822.   SingleUser.Bytes       := ByteCount;
  823.   Uebersicht[Tag,Stunde] := Uebersicht[Tag,Stunde] + 1;
  824.   If FirstTag = 0 then FirstTag := Tag;
  825.   SingleUser.Dauer       := SingleUser.Dauer + Time;
  826.   Bytes[Stunde]          := Bytes[Stunde] + ByteCount;
  827.   AllTime                := AllTime + Time;
  828.   User[UserCount]        := SingleUser;
  829.   UserCount              := UserCount + 1;
  830.   if(Time <= 0) then Time := 1;
  831.   Baud_std[Stunde]       := Baud_std[Stunde] + (ByteCount / Time * 8 / 60);
  832.  end;
  833. end;
  834.  
  835. procedure LogScan;
  836. Var Zeile   :  String[255];
  837.     Error   :  Integer;
  838.  
  839. begin
  840.  Zeile := ' ';
  841.  Error := 0;
  842.  { Oeffnen des Log's }
  843.  
  844.  Assign(LogFile,ParamStr(2));
  845.  {$I-} reset(LogFile); {$I+}
  846.  If IOResult <> 0 then
  847.  begin
  848.   writeln(ParamStr(2),' nicht gefunden');
  849.   exit;
  850.  end
  851.  
  852.  else
  853.  
  854.  begin
  855.   writeln;
  856.  
  857.   writeln('Connects  Benutzer   Bytes');
  858.  
  859.   repeat { Schleife bis File-Ende}
  860.  
  861.    readln(LogFile,Zeile);
  862.  
  863.    write(#13,LogCount:6,'  ',UserCount:8);
  864.  
  865.    if Zeile[27] <> '?' then
  866.    begin
  867.     LogCount := LogCount + 1;
  868.     Call := Copy(Zeile,1,6);
  869.     if NewUser(Zeile) then getUser(Zeile);
  870.  
  871.     case Zeile[37] of
  872.      '1' : Channel1 := Channel1 + 1;
  873.      '2' : Channel2 := Channel2 + 1;
  874.      '3' : Channel3 := Channel3 + 1;
  875.      '4' : Channel4 := Channel4 + 1;
  876.      '5' : Channel5 := Channel5 + 1;
  877.      '6' : Channel6 := Channel6 + 1;
  878.      '7' : Channel7 := Channel7 + 1;
  879.      '8' : Channel8 := Channel8 + 1;
  880.      '9' : Channel9 := Channel9 + 1;
  881.     end;
  882.  
  883.     write(ByteCount:10:0);
  884.  
  885.    end;
  886.  
  887.   until eof(LogFile);
  888.   LastDate := Copy(Zeile,9,8);
  889.   LastTime := Copy(Zeile,19,5);
  890.  
  891.   writeln(#13#10#10#10'Sortierlauf ...');
  892.   Sort;
  893.   Writeln(^M^J^M^J' Mit Drucker? (J/N)');
  894.   ch := readkey;
  895.   ch := upcase(ch);
  896.  
  897.   Drucker := (Ch = 'J');
  898.  
  899.   Writeln(^M^J^M^J' Mit Import-Option für DIE BOX? (J/N)');
  900.   ch := readkey;
  901.   ch := upcase(ch);
  902.  
  903.   BoxProto := (Ch = 'J');
  904.  
  905.   if Drucker then
  906.   begin
  907.    writeln(Lst,'Log-Analyse vom ',FirstDate,' bis zum ',LastDate);
  908.    writeln(lst);
  909.   end;
  910.  
  911.   if(BoxProto) then
  912.   begin
  913.    assign(ImportChan,'STAT.IMP');
  914.    rewrite(ImportChan);
  915.   end;
  916.  
  917.   OutUebersicht(Drucker);
  918.   OutUser(Drucker);
  919.   OutChannel(Drucker);
  920.  
  921.  end;
  922.  Close(LogFile);
  923.  if(BoxProto) then Close(ImportChan);
  924. end;
  925.  
  926.  
  927.  
  928. begin
  929.  
  930.  { Initialisierung der Globalen Variablen  }
  931.  
  932.  lowvideo;
  933.  FillChar(User,SizeOf(User),0);
  934.  
  935.  For I :=1 to 31 do
  936.  begin
  937.   For N := 0 to 23 do Uebersicht[I,N] := 0;
  938.  end;
  939.  
  940.  For N := 0 to 23 do begin;Betrieb[N] := 0;Bytes[N]:=0;Baud_std[N]:=0;end;
  941.  
  942.  maxBetrieb  :=    0;
  943.  UserCount   :=    0;
  944.  LogCount    :=    0;
  945.  AllTime     :=    0.0;
  946.  Channel1    :=    0;
  947.  Channel2    :=    0;
  948.  Channel3    :=    0;
  949.  Channel4    :=    0;
  950.  Channel5    :=    0;
  951.  Channel6    :=    0;
  952.  Channel7    :=    0;
  953.  Channel8    :=    0;
  954.  Channel9    :=    0;
  955.  FirstTag    :=    0;
  956.  maxTag      :=    0;
  957.  MaxTime     :=    0;
  958.  MaxByte     :=    0;
  959.  GlobalByteCount := 0;
  960.  GlobalBytesDurch := 0;
  961.  Baud  := 0;
  962.  MaxBaud := 0;
  963.  MinBaud := 5000;
  964.  Drucker    :=   false;
  965.  Call       :=   ' ';
  966.  Ch         :=   ' ';
  967.  FirstDate  :=   ' ';
  968.  LastDate   :=   ' ';
  969.  AllTime    :=   0;
  970.  Stunde     :=   0;
  971.  Tag        :=   0;
  972.  maxBetrieb :=   0;
  973.  i          :=   0;
  974.  N          :=   0;
  975.  UserTime   :=   0;
  976.  ByteCount  :=   0;
  977.  
  978.  writeln('Log-Analyse fuer DIE BOX ab Version 1.4           DF3AV, 14.09.1988');
  979.  writeln('                                                  DB9AP, 18.03.1988');
  980.  
  981.  if ParamCount <> 2 then
  982.  begin
  983.   writeln('Parameter fehlerhaft! Aufruf: LOGSCAN BOXCALL FILENAME');
  984.   Halt;
  985.  end
  986.  
  987.  else
  988.  
  989.  LogScan;
  990.  
  991.  if Drucker then write(lst,#12);
  992.  
  993. end.
  994.  
  995.